【掉过的坑】VUE向django发送post返回403:CSRF Failed: CSRF token missing or incorrect

您所在的位置:网站首页 vue 发送请求报403 【掉过的坑】VUE向django发送post返回403:CSRF Failed: CSRF token missing or incorrect

【掉过的坑】VUE向django发送post返回403:CSRF Failed: CSRF token missing or incorrect

2023-08-25 07:11| 来源: 网络整理| 查看: 265

问题描述

前端是VUE,后端是django。 VUE用axios向后端发送POST代码如下:

let params = new URLSearchParams() params.append('orderID', orderId) params.append('dishID', dishId) axios.post(loginUrL, params}) .then(response => { console.log(response) cb() }) .catch(error => { console.log(error) errorCb() })

但是服务器返回403错误,点开一看,CSRF Failed: CSRF token missing or incorrect

原因

根据这个链接https://stackoverflow.com/a/26639895 这是一个django的跨域访问问题。 django,会对合法的跨域访问做这样的检验,cookies里面存储的’csrftoken’,和post的header里面的字段”X-CSRFToken’作比较,只有两者匹配,才能通过跨域检验。否则会返回这个错误:CSRF Failed: CSRF token missing or incorrect

解决方法

由上面的分析可以得出,只要在POST请求的header添加一个字段’X-CSRFToken’,这个字段和cookie里面的‘csrftoken’一样就好了。

在post请求添加一个header,内容如下:

{headers: {'X-CSRFToken': this.getCookie('csrftoken')}

其中,getCookies是这样一个函数,用于将cookies里面的内容按名字取出:

getCookie (name) { var value = '; ' + document.cookie var parts = value.split('; ' + name + '=') if (parts.length === 2) return parts.pop().split(';').shift() },

最终的POST请求如下:

params.append('orderID', orderId) params.append('dishID', dishId) axios.post(loginUrL, params, {headers: {'X-CSRFToken': this.getCookie('csrftoken')}}) .then(response => { console.log(response) cb() }) .catch(error => { console.log(error) errorCb() })


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3